
package com.tocea.formation.users.library;


import java.util.Iterator;
import java.util.Set;

public final class LibraryImpl implements ILibrary
{
    
    private Set<IExemplaire> books;
    
    public Set<IExemplaire> getAllExamplaires() {
    
        return books;
    }
    
    public void addExemplaire(IBook _book) {
    
        addExemplaires(_book, 1);
        
    }
    
    public void addExemplaires(IBook _book, int nbExemplaire) {
    
        IExemplaire exemplaire = getExemplaire(_book);
        if (exemplaire == null) {
            exemplaire = Libraryfactory.INSTANCE.createExemplaire(_book);
        }
        exemplaire.addExemplaire(nbExemplaire);
        
    }
    
    public void removeBook(IBook _book) {
    
        boolean find = false;
        for (Iterator<IExemplaire> iterator = books.iterator(); !find && iterator.hasNext();) {
            IExemplaire exemplaire = iterator.next();
            find = exemplaire.getBook().equals(_book);
            if (find) {
                books.remove(exemplaire);
            }
            
        }
        
    }
    
    public IExemplaire getExemplaire(IBook _book) {
    
        boolean find = false;
        IExemplaire res = null;
        for (Iterator<IExemplaire> iterator = books.iterator(); !find && iterator.hasNext();) {
            IExemplaire exemplaire = iterator.next();
            find = exemplaire.getBook().equals(_book);
            if (find) {
                res = exemplaire;
            }
            
        }
        return res;
    }
    
    public boolean existBook(IBook _book) {
    
        boolean find = false;
        for (Iterator<IExemplaire> iterator = books.iterator(); !find && iterator.hasNext();) {
            IExemplaire exemplaire = iterator.next();
            find = exemplaire.getBook().equals(_book);
            
        }
        return false;
    }
    
    public void removeExemplaires(IBook _book, int nbExemplaire) throws NotEnoughtExemplaireException {
    
        IExemplaire exemplaire = getExemplaire(_book);
        if (exemplaire == null)
            throw new NotEnoughtExemplaireException("aucun exemplaire disponible pour le libre " + _book.getName());
        else {
            exemplaire.removeExemplaire(nbExemplaire);
        }
        
    }
    
}
